// 导入 http 模块
import http from 'wechat-http'
/**
 * 配置接口基础路径
 */
http.baseURL = 'https://live-api.itheima.net'
/**
 * 请求拦截器
 */
http.intercept.request = (config)=>{
  //配置token
  const {token} = getApp()
  // 指定一个公共的头信息
  // 初始为空对象后续可以扩展
  const defaultHeader = {}
  // 追加 token 头信息
  if (token) defaultHeader.Authorization = 'Bearer '+token
  // 合并自定义头信息和公共头信息
  config.header = Object.assign(defaultHeader, config.header)
  return config
}
/**
 * 配置响应拦截器
 */
http.intercept.response = async (res)=>{  
  //如果token过期，状态码为401则发送刷新token请求
  if(res.statusCode == 401){
    //如果返回401的接口中有刷新token的接口代表refreshToken过期，就去登录页面
    if(res.config.url.includes('/refreshToken')){
      //获取当前路由栈(数组最后一个)
      const pageStack = getCurrentPages()
      const currentIndex = pageStack[pageStack.length-1].route
      //跳转登录页
     return wx.redirectTo({
        url: '/pages/login/index?redirectURL='+currentIndex,
      })
    }
    const app = getApp()
    const tokenInfo = await wx.http({
      url:'/refreshToken',
      method:'POST',
      //请求头要带refreshToken
      header:{
        Authorization:'Bearer '+app.refresh_token
      }
    })
    app.setToken(tokenInfo.data.token,tokenInfo.data.refreshToken)
    //重新发起之前401的请求,传递新的token
    return wx.http(
      Object.assign(res.config,{
        header: {
          Authorization:'Bearer '+app.token,
        },
      })
    )
  }
  return res.data
}
/**
 * 挂载方法到全局
 */
wx.http = http
/**
 * 模块导出
 */
export default http
